using System;
using System.Runtime.InteropServices;
using System.Security.Permissions;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Security;
using SharePointResourcesUpdaterLib;
using System.Collections.Generic;
using Microsoft.SharePoint.Administration;
using System.Linq;

namespace SharePointResourcesUpdater.Features.SharePointResourcesUpdater.Manualtrigger
{
    /// <summary>
    /// This class handles events raised during feature activation, deactivation, installation, uninstallation, and upgrade.
    /// </summary>
    /// <remarks>
    /// The GUID attached to this class may be used during packaging and should not be modified.
    /// </remarks>

    [Guid("d10ed804-a4ee-4e10-8315-eeb7ffd7f586")]
    public class SharePointResourcesUpdaterEventReceiver : SPFeatureReceiver
    {
        // Uncomment the method below to handle the event raised after a feature has been activated.

        public override void FeatureActivated(SPFeatureReceiverProperties properties)
        {
            SPDailySchedule sched = new SPDailySchedule();
            sched.BeginHour = 4;
            sched.BeginMinute = 00;
            sched.BeginSecond = 00;
            sched.EndHour = 23;
            sched.EndMinute = 00;
            sched.EndSecond = 00;
            ResourcesUpdaterJob.UpdateResourcesTrigerredOrPeriod(sched, true);
        }


        // Uncomment the method below to handle the event raised before a feature is deactivated.

        public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
        {
            SPSecurity.RunWithElevatedPrivileges(() =>
            {
                List<SPJobDefinition> jobToDel = new List<SPJobDefinition>();
                SPWebServiceCollection svcoll = new SPWebServiceCollection(SPFarm.Local);

                foreach (SPJobDefinition job in svcoll.First().JobDefinitions)
                    if (job is ResourcesUpdaterJob) jobToDel.Add(job);

                jobToDel.ForEach(x => x.Delete());
            });
        }



        // Uncomment the method below to handle the event raised after a feature has been installed.

        //public override void FeatureInstalled(SPFeatureReceiverProperties properties)
        //{
        //}


        // Uncomment the method below to handle the event raised before a feature is uninstalled.

        //public override void FeatureUninstalling(SPFeatureReceiverProperties properties)
        //{
        //}

        // Uncomment the method below to handle the event raised when a feature is upgrading.

        //public override void FeatureUpgrading(SPFeatureReceiverProperties properties, string upgradeActionName, System.Collections.Generic.IDictionary<string, string> parameters)
        //{
        //}
    }
}
